package com.zmcn.fileTransfer.fw.util;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 常用正则表达式
 * 
 * @author <b>欧建东<br/>
 *         Email:oyjd@163.com</b>
 * 
 */
public class RegexUtil {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String sou = "fdsfa<b>aaaa\r\n</b>  gasdf<b>bbbb</b>asdg<b>cccc</b>asdfa";
		String r1 = "<b>(.*?)</b>";
		// String r2 = "<b>(.*)</b>";
		// 只是在.*后加了一个“?”， 结果就大不一样了。
		// 可以这样说，如果想贪婪匹配，用.*，
		// 如果想勉强匹配，就用.*?
		Pattern pattern = Pattern.compile(r1, Pattern.DOTALL);
		Matcher matcher = pattern.matcher(sou);
		while (matcher.find()) {
			System.out.println(matcher.group(1));
		}
	}

	/**
	 * 解析多条多组数据
	 * 
	 * @param sou
	 *            目标字符串
	 * @param reg
	 *            规则
	 * @param pos
	 *            每组的位置
	 * @return
	 */
	public static List<String[]> getComplex(String sou, String reg, int[] pos) {
		List<String[]> result = new ArrayList<String[]>();
		Pattern pattern = Pattern.compile(reg, Pattern.DOTALL);
		Matcher matcher = pattern.matcher(sou);
		while (matcher.find()) {
			String[] s = new String[pos.length];
			for (int i = 0; i < pos.length; i++) {
				s[i] = matcher.group(pos[i]);
			}
			result.add(s);
		}
		return result;
	}

	/**
	 * 获取单值
	 * 
	 * @param sou
	 *            目标字符串
	 * @param reg
	 *            规则
	 * @return
	 */
	public static String getSingle(String sou, String reg) {
		String result = null;
		List<String[]> t = getComplex(sou, reg, new int[] { 1 });
		if (t.size() > 0) {
			result = t.get(0)[0];
		}
		return result;
	}

	/**
	 * 获取多条单值
	 * 
	 * @param sou
	 *            目标字符串
	 * @param reg
	 *            规则
	 * @return
	 */
	public static List<String> getMuti(String sou, String reg) {
		List<String> result = new ArrayList<String>();
		List<String[]> t = getComplex(sou, reg, new int[] { 1 });
		for (String[] s : t) {
			result.add(s[0]);
		}
		return result;
	}

}
